/**
 * 服务层统一配置辅助模块
 * 提供所有服务需要的通用导入和辅助函数
 * 使用统一配置入口模式，避免路径引用问题
 */

// 导入路径解析器
const pathResolver = require('./path_resolver.js');

// 定义基础模块
let modules = {};

// 提供默认实现，避免模块缺失导致的错误
modules.projectSetting = { 
  NEWS_CATE: [],
  NEWS_FIELDS: []
};

// 提供默认辅助模块实现
modules.cloudHelper = {
  callCloudData: async () => ({}),
  callCloudSumbit: async () => ({ code: 200, data: {} })
};

modules.dataHelper = {
  checkSort: () => true,
  sleep: (time) => new Promise(resolve => setTimeout(resolve, time)),
  isDefined: (v) => v !== undefined && v !== null && v !== '',
  isUndefined: (v) => v === undefined || v === null || v === ''
};

modules.timeHelper = {
  time: () => Math.floor(Date.now()/1000),
  timestamp2Time: (timestamp, fmt) => {
    let date = new Date(timestamp * 1000);
    let ret;
    const opt = {
      "Y+": date.getFullYear().toString(),
      "M+": (date.getMonth() + 1).toString(),
      "D+": date.getDate().toString(),
      "h+": date.getHours().toString(),
      "m+": date.getMinutes().toString(),
      "s+": date.getSeconds().toString()
    };
    for (let k in opt) {
      ret = new RegExp("(" + k + ")").exec(fmt);
      if (ret) {
        fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
      };
    };
    return fmt;
  }
};

modules.util = {
  getIP: () => '127.0.0.1',
  isDefined: (v) => v !== undefined && v !== null && v !== '',
  isUndefined: (v) => v === undefined || v === null || v === ''
};

// 定义默认BaseBiz实现
modules.BaseBiz = class {
  static getCateName(cateId, cateList = []) {
    if (!cateId || !cateList || !Array.isArray(cateList)) return '';
    for (let k = 0; k < cateList.length; k++) {
      if (cateList[k]?.id === cateId) return cateList[k]?.title || '';
    }
    return '';
  }
  
  static getCateList(cateList = []) {
    if (!cateList || !Array.isArray(cateList)) return [];
    return cateList.map(item => ({
      label: item.title,
      type: 'cateId',
      val: item.id,
      value: item.id
    }));
  }
  
  static setCateTitle() {}
  
  static initPage(that) {
    console.log('初始化页面', that);
    if (that && that.setData) {
      that.setData({
        isInit: true
      });
    }
  }
};

// 尝试使用小程序支持的路径格式导入模块
try {
  // 使用相对路径（不要太深层）
  const projectConfig = require('../../../config/projects_config.js');
  if (projectConfig) {
    console.log('使用相对路径导入projects_config.js成功');
    modules.projectSetting = projectConfig;
  }
} catch (e) {
  console.error('无法导入projects_config.js，使用默认配置', e.message);
}

// 尝试导入辅助模块 - 使用单一可靠的相对路径形式
try {
  modules.cloudHelper = require('../../../helpers/cloud_helper.js');
  console.log('成功导入cloudHelper模块');
} catch (e) {
  console.error('导入cloudHelper失败，使用默认实现', e.message);
}

try {
  modules.dataHelper = require('../../../helpers/data_helper.js');
  console.log('成功导入dataHelper模块');
} catch (e) {
  console.error('导入dataHelper失败，使用默认实现', e.message);
}

try {
  modules.timeHelper = require('../../../helpers/time_helper.js');
  console.log('成功导入timeHelper模块');
} catch (e) {
  console.error('导入timeHelper失败，使用默认实现', e.message);
}

try {
  modules.util = require('../../../framework/utils/util.js');
  console.log('成功导入util模块');
} catch (e) {
  console.error('导入util失败，使用默认实现', e.message);
}

// 直接导入本地配置的BaseBiz，这是最可靠的方式
try {
  // 先尝试使用本项目的配置
  modules.BaseBiz = require('./base_biz_config.js');
  console.log('成功导入本项目的BaseBiz模块');
} catch (e) {
  console.error('导入本项目的BaseBiz失败，尝试全局配置', e.message);
  try {
    // 再尝试使用全局配置
    modules.BaseBiz = require('../../../config/base_biz_config.js');
    console.log('成功导入全局BaseBiz模块');
  } catch (e) {
    console.error('导入全局BaseBiz失败，使用默认实现', e.message);
  }
}

// 统一导出所有模块
module.exports = modules; 